<script>
    /**
     * ref()
    */
    // 当前的订阅者
    let activeEffect;
    // 依赖追踪类
    class Dep {
        constructor(value) {
            // 订阅者集合
            this.subscribers = new Set();
            // 值
            this._value = value;
        }
        // 获取值
        get value(){
            this.depend();
            return this._value;
        }
        // 改变值
        set value(newValue){
            this._value = newValue;
            this.notify();
        }
        // 添加订阅者
        depend() {
            if (activeEffect) {
                this.subscribers.add(activeEffect);
            }
        }
        // 通知订阅者
        notify() {
            this.subscribers.forEach(effect => {
                console.log(effect)
                effect()
            })
        }
    }
    // 保留此次订阅
    function watchEffect(effect) {
        activeEffect = effect;
        effect();
        activeEffect = null;
    }
    const dep = new Dep('hello');
    // 不考虑异步的情况下
    watchEffect(() => {
        console.log(dep.value)
    })
    dep.value = 'hello wolrd'
</script>